package code.whmmm.util.spring.aspect.annotation;

import org.springframework.stereotype.Component;
import code.whmmm.util.spring.aspect.handler.AspectHandler;

import java.lang.annotation.*;

/**
 * 用于类 或 方法 的切点,存储执行 handler 元数据。
 * <br/> 创建时间: 2019/12/23 11:42
 *
 * @author Zero
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface CodeAspect {

    /**
     * 切面处理类 .class 字节码. <br/>
     * 例如 AspectHandlerImpl.class <br/>
     * (AspectHandlerImpl 必须含有 Spring  @{@link Component} 注解。否则，会报错！)
     *
     * @return
     */
    Class<? extends AspectHandler>[] handles() default {};

    /**
     * int值，必须使用 {@link AspectType} !!!
     * <ul>
     *     <li>ALL 全部</li>
     *     <li>BEFORE 执行方法前</li>
     *     <li>AFTER 执行方法后</li>
     * </ul>
     *
     * @return
     */
    int type() default AspectType.ALL;
}
